#ifndef __SIGEL_MATH_LIB_VEC3_H__
#define __SIGEL_MATH_LIB_VEC3_H__

class vec3
{
public:
	float x,y,z;

	vec3();
	vec3(float x,float y,float z);
	vec3(float value);
	vec3(const vec3 &copy);


	vec3& operator =(const vec3 &other);

	bool operator == (const vec3 &other) const;
	bool operator != (const vec3 &other) const;

	vec3 operator +() const;
	vec3 operator -() const;

	vec3 operator +(const vec3 &other) const;
	vec3 operator +(float value) const;
	vec3 operator *(const vec3 &other) const;
	vec3 operator *(float value) const;


	vec3& operator +=(const vec3 &other);
	vec3& operator +=(float value);
	vec3& operator *=(const vec3 &other);
	vec3& operator *=(float value);


	vec3 operator -(const vec3 &other) const;
	vec3 operator -(float value) const;
	vec3 operator /(const vec3 &other) const;
	vec3 operator /(float value) const;


	vec3& operator -=(const vec3 &other);
	vec3& operator -=(float value);
	vec3& operator /=(const vec3 &other);
	vec3& operator /=(float value);

	operator float*();
	operator const float*() const;

	float operator [] (int index);

	vec3 lerp(const vec3 &other, float scalar) const;
	void lerpme(const vec3 &other, float scalar);

	float len();
	void normalize();

	float dot(const vec3& other);
	vec3 cross(const vec3& other);

};

#endif
